package ejemplo_1.rmi;

import interfaz.TDAManejoDatos;

import java.rmi.*;
import java.rmi.server.UnicastRemoteObject;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.*;

import javax.swing.JOptionPane;

import negocio.Alumno;
import negocio.ItemPP;
import negocio.ItemReceta;
import negocio.Mesa;
import negocio.Mozo;
import negocio.PlanProduccion;
import negocio.Restaurant;
import negocio.Sector;

//import ejemplo_1.bean.Mozo;


public class GestionDatos extends UnicastRemoteObject implements TDAManejoDatos {

	private static final long serialVersionUID = 1L;
	private Set<Alumno> alumnos;
	private Connection con;
	
	public GestionDatos() throws RemoteException {
		super();	
		alumnos = new HashSet<Alumno>();
		alumnos.add(new Alumno(1,"Juan"));
		alumnos.add(new Alumno(2,"Pedro"));
		alumnos.add(new Alumno(4,"Maria"));
	}
	
	
	/*Conexion*/
		public void connect()
		{
			try
			{
							
				Class.forName("net.sourceforge.jtds.jdbc.Driver");
				String url = "jdbc:jtds:sqlserver://127.0.0.1:1433/restaurant;tds=8.0;lastupdatecount=true";
				String usuario = "sa";
				String password = "123456";
				con = DriverManager.getConnection (url, usuario, password);
			}
			
	        catch (Exception e)
	        {
				JOptionPane.showMessageDialog(null, "Error al conectar a la BD", "Informacion", JOptionPane.INFORMATION_MESSAGE);
				
	            System.err.println ("No se pudo conectar con la Base de Datos.(Restaurant)");
	        }
			        
		}
	/*Fin de Conexion*/


	public void envioAlumno(Alumno alumno) throws RemoteException 
	{
		alumnos.add(alumno);
	}

	public Alumno obtengoAlumno(int nroAlumno) throws RemoteException {
		Alumno aux;
		for(Iterator<Alumno> i=alumnos.iterator();i.hasNext();)
		{
			aux = i.next();
			if(aux.getNumeroAlumno()==nroAlumno)
				return aux;
		}
		throw new RemoteException("No encontre al alumno");
	}

	public Set<Alumno> obtengoAlumnos() throws RemoteException 
	{
		return alumnos;
	}

	@Override
	public int cantidadAlumnos() throws RemoteException {
		// TODO Auto-generated method stub
		return alumnos.size();
	}

	@Override
	public Set<Restaurant> obtengoRestaurants() throws RemoteException {
		// TODO Auto-generated method stub
		return null;
	}

	public Sector obtenerSector(int idsector) throws RemoteException {
		// TODO Auto-generated method stub
		try {
			this.connect();
			Statement s;
			s = con.createStatement();
			String sentencia1 = "SELECT IDSECTOR, nombre, idrestaurant FROM SECTORES WHERE idsector = " + idsector;
			s.executeQuery(sentencia1);
			
			ResultSet rs= s.getResultSet();
			
			Sector m = new Sector();
			if(rs.next())
			{
				System.out.println("Sector Seleccionado: " +rs.getString("nombre"));
				m.setSector(obtenerSector(rs.getInt("idsector")));
				m.setNombre(rs.getString("nombre"));
				//m.setRestaurant(TDAManejoDatos.this.obtenerRestaurant(rs.getInt("idrestaurant")));
				//m.setRestaurant(rs.getInt("idrestaurant"));
				
			}
			this.con.close();
			return m;
			
			
		}
		catch(SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("Error Query: " + e.getMessage());
			return null;
		}

	}

	
	public ArrayList<Mesa> obtenerMesas() throws RemoteException {
			
			try {
				this.connect();
				Statement s;
				s = con.createStatement();
				System.out.println("GestionDatos ->obtenerMesa");
				
				String sentencia1 = "SELECT idmesa, descripcion, idsector, cantpersonas, " +
						"idmozo, condicion, fecha, capacidad, capacidadmaxima, idrestaurant " +
						"FROM mesas";
				s.executeQuery(sentencia1);
				
				ResultSet rs= s.getResultSet();
				
				ArrayList<Mesa>mesas= new ArrayList<Mesa>();
				
				while (rs.next()){
					Mesa m = new Mesa();
					System.out.println("Mesa: " +rs.getString("idmesa") +" - " +rs.getString("descripcion") +" - " +  rs.getString("idsector"));
					//m.setLegajo(rs.getInt("idmozo"));
					//m.setNombre(rs.getString("nombre"));
					m.setIdMesa(rs.getInt("idmesa"));
					//m.setDescripcion(rs.getString("descripcion"));
					//Sector s = new Sector();
					//s = TDAManejoDatos.this.obtenerSector(rs.getInt("idsector"));
					//m.setSector(sector);
					//m.setSector(TDAManejoDatos.this.obtenerSector(rs.getInt("idsector")));
					//m.setIdSector(Sector.this.setIdSector(rs.getInt("idsector")));
				//	m.setSector();
					m.setCantPersonas(rs.getInt("cantpersonas"));
					//m.setIdMozo());
				//	m.setCondicion(rs.getString("condicion"));
					m.setFecha(rs.getDate("fecha"));
					//m.setCapacidad(rs.getInt("capacidad"));
					m.setCapacidadMaxima(rs.getInt("capacidadmaxima"));
					//m.setIdrestaurant(rs.getInt("idrestaurant"));
					
					
				
					
					
					
					
					
					
					
					mesas.add(m);
				}
				this.con.close();
				return mesas;
				
				
			}
			catch(SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				System.out.println("Error Query: " + e.getMessage());
				return null;
			}


	}
	
	public Mesa obtenerMesa(int idMesa) throws RemoteException {
		
		try {
			this.connect();
			Statement s;
			s = con.createStatement();
			String legajo;
			String nombre;
			String estado;
			String sentencia1 = "SELECT idmesa, descripcion, idsector, " +
					"cantpersonas, idmozo, condicion, fecha, capacidad, " +
					"capacidadmaxima FROM Mesas WHERE idmesa = " + idMesa;
			s.executeQuery(sentencia1);
			
			ResultSet rs= s.getResultSet();
			
			Mesa m = new Mesa();
			while (rs.next()){
			
				System.out.println("Mesa: " +rs.getString("descripcion"));
				m.setIdMesa(rs.getInt("idmesa"));
//				m.setDescripcion(rs.getString("descripcion"));
				//m.setSector("idsector");
				m.setCantPersonas(rs.getInt("cantpersonas"));
	//			m.setCondicion(rs.getString("condicion"));
		//		m.setCapacidad(rs.getInt("capacidad"));
				m.setCapacidadMaxima(rs.getInt("capacidadMaxima"));
				
				
				
				
			}
			this.con.close();
			return m;
			
			
		}
		catch(SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("Error Query: " + e.getMessage());
			return null;
		}

		
	
	}

	public ArrayList<PlanProduccion> obtenerPlanProduccion() throws RemoteException {
		
		try {
			this.connect();
			Statement s;
			s = con.createStatement();
			System.out.println("GestionDatos ->obtenerPlanProduccion desde GestionDatos");
			
			String sentencia1 = "SELECT idplan, fechacreacion, fechavencimiento, idrestaurante " + 
					"FROM planproduccion";
			System.out.println("Sigue en obtener PLan");
			s.executeQuery(sentencia1);
			
			ResultSet rs= s.getResultSet();
			
			ArrayList<PlanProduccion>plan= new ArrayList<PlanProduccion>();
			
			while (rs.next()){
				PlanProduccion pp = new PlanProduccion();
				
				System.out.println("PlanProduccion: " +rs.getString("idplan") +" - " +rs.getDate("fechacreacion") +" - " +  rs.getDate("fechavencimiento") );
				pp.setIdPlan(rs.getInt("idplan"));
				pp.setFechaCreacion(rs.getDate("fechacreacion"));
				pp.setFechaVencimiento(rs.getDate("fechavencimiento"));
				plan.add(pp);
			}
			this.con.close();
			return plan;
			
			
		}
		catch(SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("Error Query: " + e.getMessage());
			return null;
		}
	}

		public ArrayList<ItemPP> obtenerItemsPlanProduccion(int idPlanProd) throws RemoteException {
			
			try {
				this.connect();
				Statement s2;
				s2 = con.createStatement();
				System.out.println("GestionDatos ->obtenerItemsPlanProduccion desde GestionDatos");
				
				String sentencia2 = "SELECT ip.iditempp, ip.idplan, ip.itemreceta, ip.estado, ir.nombre from itempp ip " +
								"INNER JOIN itemreceta ir ON ip.itemreceta = ir.iditemreceta WHERE ip.idplan= " + idPlanProd + "";

				System.out.println("Sigue en obtener ItemsPLanProd");
				s2.executeQuery(sentencia2);
				System.out.println(sentencia2.toString());
				
				ResultSet rs2= s2.getResultSet();
				
				ArrayList<ItemPP> itemplan= new ArrayList<ItemPP>();
				
				while (rs2.next()){
					ItemPP pp2 = new ItemPP();
					ItemReceta ir = new ItemReceta();
					Vector<ItemReceta> irv = new Vector<ItemReceta>();
					
					System.out.println("Item PlanProduccion: " +rs2.getInt("iditempp") +" - " +rs2.getInt("idplan") + " - " +  rs2.getInt("itemreceta")  + " - " +  rs2.getString("estado") + " - " +  rs2.getString("nombre"));
					pp2.setIdItemPP(rs2.getInt("iditempp"));
					pp2.setEstado(rs2.getString("estado"));
					ir.setnNombre(rs2.getString("nombre"));
					//ir.setCodigo("codigo");
					irv.add(ir);
					
					
					pp2.setItemsPP(irv);
					
					
					itemplan.add(pp2);
				}
				this.con.close();
				return itemplan;
				
				
			}
			catch(SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				System.out.println("Error Query: " + e.getMessage());
				return null;
			}

}


	@Override
	public Restaurant obtenerRestaurant(int idrestaurant)
			throws RemoteException {
		// TODO Auto-generated method stub
		return null;
	}


	
	}

	

	


